package com.chinalcoal.ai.utils.util;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class PdfToImage {

    public static void main(String[] args) {
        try {
            // 输入PDF文件路径
            String pdfFilePath = "G:\\我的项目\\PDF转图片\\pdfToImage\\教育部学籍在线验证报告_史晓坤.pdf";

            // 输出图片目录
            String outputDir = "G:\\我的项目\\PDF转图片\\pdfToImage";

            // 调用转换方法
            int pageCount = PdfToImage.convertPdfToImage(pdfFilePath, outputDir);

            System.out.println("转换完成，共" + pageCount + "页");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 将PDF文件转换为图片
     * @param pdfFilePath PDF文件路径
     * @param outputDir 图片输出目录
     * @param imageFormat 图片格式，如"jpg","png"等
     * @param dpi 图片分辨率
     * @return 转换成功的图片数量
     * @throws IOException 当文件读写异常时抛出
     */
    public static int convertPdfToImage(String pdfFilePath, String outputDir, String imageFormat, int dpi) throws IOException {
        PDDocument document = null;
        try {
            File file = new File(pdfFilePath);
            String name = file.getName();
            System.out.println("文件名称: "+ name);
            String fileName = name.substring(0, name.lastIndexOf("."));
            // 加载PDF文档
            document = PDDocument.load(file);
            
            // 创建PDF渲染器
            PDFRenderer pdfRenderer = new PDFRenderer(document);
            
            // 获取PDF页数
            int pageCount = document.getNumberOfPages();
            
            // 确保输出目录存在
            File outputDirectory = new File(outputDir);
            if (!outputDirectory.exists()) {
                outputDirectory.mkdirs();
            }
            
            // 遍历每一页并转换为图片
            for (int i = 0; i < pageCount; i++) {
                // 渲染PDF页面为BufferedImage
                BufferedImage image = pdfRenderer.renderImageWithDPI(i, dpi);
                
                // 构造输出文件路径
                String outputFilePath = outputDir + File.separator + fileName + "." + imageFormat.toLowerCase();
                
                // 将图片写入文件
                ImageIO.write(image, imageFormat.toLowerCase(), new File(outputFilePath));
            }
            
            return pageCount;
        } finally {
            // 关闭PDF文档
            if (document != null) {
                document.close();
            }
        }
    }
    
    /**
     * 将PDF文件转换为图片（默认DPI为96）
     * @param pdfFilePath PDF文件路径
     * @param outputDir 图片输出目录
     * @param imageFormat 图片格式，如"jpg","png"等
     * @return 转换成功的图片数量
     * @throws IOException 当文件读写异常时抛出
     */
    public static int convertPdfToImage(String pdfFilePath, String outputDir, String imageFormat) throws IOException {
        return convertPdfToImage(pdfFilePath, outputDir, imageFormat, 96);
    }
    
    /**
     * 将PDF文件转换为PNG图片（默认DPI为96）
     * @param pdfFilePath PDF文件路径
     * @param outputDir 图片输出目录
     * @return 转换成功的图片数量
     * @throws IOException 当文件读写异常时抛出
     */
    public static int convertPdfToImage(String pdfFilePath, String outputDir) throws IOException {
        return convertPdfToImage(pdfFilePath, outputDir, "png", 96);
    }
}
